#include <math.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

#ifndef HEAP_H
#define HEAP_H

class Heap
{
private:
    int *heap, *heap_aux; //Son arreglos

public:

    Heap(int max);

    void Float(int index); //Funcion para flotar elementos en el heap

    void Insert(int num); //Funcion para insertar elementos

    void Delete(int index); //funcion para eliminar elementos

    void Impr(bool all); //funcion para mostrar el heap

    void Heapify(int index); //funcion para hundir elementos. Le puse ese nombre porque asi lo llama el libro pero Hector parece que dijo que
    //ese nombre era para otra funcion

    int* Build_Heap(int* array); //Funcion que convierte un arreglo en heap. El arreglo que le pases debe tener el tamaño en la primera
    //posicion

    void Heapify_aux(int index); //Funcion para hundir elementos en el heap_aux, esta funcion la uso para convertir un arreglo en heap
    //y por eso uso un arreglo auxiliar (heap_aux).
	
	void Decrease_Key(int index, int new_key);
};

#endif // HEAP_H
